package com.cyy.dyeing.common;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @Author: cyy
 * @Date: 2024/7/22
 * 标准响应结果的封装类
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result<T> {
    private static final int CODE_OK = 200; //表示成功
    private static final int CODE_ERROR_BUSINESS = 500; //表示业务错误
    private static final int CODE_ERROR_UNLOGIN = 520; //表示未登录
    private static final int CODE_ERROR_SYSTEM = 530; //表示系统错误
    private Boolean success; // 是否操作成功
    /* 业务代码
    * 200 表示成功
    * 500 表示业务员错误【用户操作失误导致的错误】
    * 520 表示未登录
    * 530 表示系统错误
    */
    private Integer code;
    private String message; // 操作结果信息
    private T data; // 向前端响应的数据

    /**
     * 用户响应无信息无数据的成功结果响应
     * @return
     */
    public static Result<?> ok(){
        return new Result<>(true, CODE_OK, null, null);
    }

    /**
     * 用户响应有信息无数据的成功结果响应
     * @param message
     * @return
     */
    public static Result<?> ok(String message){
        return new Result<>(true, CODE_OK, message, null);
    }

    /**
     * 用户响应无信息有数据的成功结果响应
     * @param data
     * @return
     * @param <T>
     */
    public static <T> Result<?> ok(T data){
        return new Result<>(true, CODE_OK, null, data);
    }

    /**
     * 用户响应有信息有数据的成功结果响应
     * @param message
     * @param data
     * @return
     * @param <T>
     */
    public static <T> Result<?> ok(String message, T data){
        return new Result<>(true, CODE_OK, message, data);
    }

    /**
     * 有信息无数据的错误响应结果
     * @param errCode
     * @param message
     * @return
     */
    public static Result<?> error(int errCode, String message){
        return new Result<>(false, errCode, message,null);
    }

    /**
     * 有信息有数据的错误响应结果
     * @param errCode
     * @param message
     * @return
     */
    public static <T> Result<?> error(int errCode, String message, T data){
        return new Result<>(false, errCode, message,data);
    }
}
